home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amiga68k / vconfig / vconfig.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  10.7 KB  |  403 lines

  1. /*
  2. **
  3. ** VConfig - creator for VBCC v0.3d
  4. **
  5. */
  6.  
  7. /* #include <dos.h> */
  8. #include <ctype.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12.  
  13. #include "vconfig.h"
  14.  
  15. #include "help.c"
  16. #include "menu_main.c"
  17. #include "menu_optimize.c"
  18. #include "menu_warnings.c"
  19. #include "menu_includePath.c"
  20. #include "menu_libLink.c"
  21. #include "menu_define.c"
  22. #include "menu_compiler.c"
  23. #include "menu_code.c"
  24.  
  25.  
  26. const char vers[] = "$VER: VConfig 1.0 (28.7.96)";
  27.  
  28.  
  29. void line(int len)
  30. {
  31.     int i;
  32.     char line[255];
  33.  
  34.     for(i = 0; i < len; i++) line[i] = ' ';
  35.     line[i] = 0; /* EOL */
  36.  
  37.     printf("%s\n\n", line);
  38. }
  39.  
  40.  
  41. void back_help_quit(void)
  42. {
  43.     line(55);
  44.     printf("     B. Back            H. Help           Q. Quit\n");
  45.     line(55);
  46.  
  47.     printf("\nPlease select: ");
  48. }
  49.  
  50. void back_quit(void)
  51. {
  52.     line(55);
  53.     printf("     B. Back                               Q. Quit\n");
  54.     line(55);
  55.  
  56.     printf("\nPlease select: ");
  57. }
  58.  
  59.  
  60.  
  61. void removeLib(char *lib)
  62. {
  63.     int i;
  64.     for(i = 0; i < 10; i++)
  65.         if(stricmp(libLinkTable[i], lib) == 0)
  66.             strcpy(libLinkTable[i], "");
  67. }
  68.  
  69.  
  70. void addLib(char *lib)
  71. {
  72.     int i;
  73.     for(i = 0; i < 10; i++)
  74.     {
  75.         if(strlen(libLinkTable[i]) == 0)
  76.         {
  77.             strcpy(libLinkTable[i], lib);
  78.             return;
  79.         }
  80.     }
  81.  
  82.     printf("\n\nVolker says:\n\"Everyone who uses more than 10 link libraries is a sick pervert and doesn't deserve to use vconfig. :-)\"\n\n<press return>");
  83.     getchar();
  84. }
  85.  
  86.  
  87. void initDefaults(void)
  88. {
  89.     verboseOutput   = 0;
  90.     cpuCode         = 0;                 /* compile for all amiga's */
  91.     fpuCode         = 0;
  92. /*    errorHighlight  = TRUE;            /* put ansi in errorreport */
  93.     optimizeMode    = 1;                 /* optimization default    */
  94.     strcpy(compilationName, "");         /* no filename             */
  95.     compileMethod       = 0;             /* Fully compilation */
  96.     keepIntermediateFiles = FALSE;
  97.     maxErrors       = 10;
  98.     maxOptPasses    = EMPTY;
  99.     inlineSize      = EMPTY;
  100.     datamodel       = LARGE;
  101.     codemodel       = LARGE;
  102.     stripfilename   = FALSE;              /* strip filepath off warnings */
  103. }
  104.  
  105.  
  106.  
  107. long readConfigFile(char *filename)
  108. {
  109.     int retval = 0;
  110.     FILE *fp;
  111.  
  112.     if((fp = fopen(filename, "r")) != NULL)
  113.     {
  114.         char line[255];
  115.         int warncount, ignorewarncount, includepathcount, liblinkcount, definecount;
  116.  
  117.         retval = 1;
  118.         warncount = ignorewarncount = includepathcount = liblinkcount = definecount = 0;
  119.  
  120.         while(fgets(line, 255, fp))
  121.         {
  122.             int len = strlen(line);
  123.             line[--len] = 0; /* remove return code */
  124.  
  125.             /* avoid empty lines */
  126.             if(len > 2)
  127.             {
  128.                 /* THESE VALUES ARE NOT MODIFIABLE */
  129.                 if(!strncmp(line, "-pp=",  4)) strcpy(pp, line);
  130.                 if(!strncmp(line, "-ppv=", 5)) strcpy(ppv, line);
  131.                 if(!strncmp(line, "-as=",  4)) strcpy(as, line);
  132.                 if(!strncmp(line, "-asv=", 5)) strcpy(asv, line);
  133.                 if(!strncmp(line, "-rm=",  4)) strcpy(rm, line);
  134.                 if(!strncmp(line, "-rmv=", 5)) strcpy(rmv, line);
  135.                 if(!strncmp(line, "-ld=",  4)) strcpy(ld, line);
  136.                 if(!strncmp(line, "-l2=",  4)) strcpy(l2, line);
  137.                 if(!strncmp(line, "-ldv=", 5)) strcpy(ldv, line);
  138.                 if(!strncmp(line, "-l2v=", 5)) strcpy(l2v, line);
  139.  
  140.  
  141.                 /* data model */
  142.                 if(!strncmp(line, "-sd", 3)) datamodel = SMALL;
  143.  
  144.                 /* code model */
  145.                 if(!strncmp(line, "-sc", 3)) codemodel = SMALL;
  146.  
  147.                 /* dontwarn */
  148.                 if(!strncmp(line, "-dontwarn=", 10) && ignorewarncount <= 9)
  149.                     ignoreWarnTable[ignorewarncount++] = strtol(&line[10], NULL, 10);
  150.  
  151.                 /* warn */
  152.                 if(!strncmp(line, "-warn=", 6) && warncount <= 9)
  153.                     warnTable[warncount++] = strtol(&line[6], NULL, 10);
  154.  
  155.                 /* define */
  156.                 if(!strncmp(line, "-D", 2) && definecount <= 9)
  157.                     strcpy(defineTable[definecount++], &line[2]);
  158.  
  159.                 /* include search path */
  160.                 if(!strncmp(line, "-I", 2) && includepathcount <= 9)
  161.                     strcpy(includePathTable[includepathcount++], &line[2]);
  162.  
  163.                 /* link ulib */
  164.                 if((!strncmp(line, "-l", 2)) && line[3] != '=' && line[4] != '=' && liblinkcount <= 9)
  165.                     strcpy(libLinkTable[liblinkcount++], &line[2]);
  166.  
  167.                 /* intermediate files */
  168.                 if(!strncmp(line, "-k", 2)) keepIntermediateFiles = TRUE;
  169.  
  170.                 /* don't compile */
  171.                 if(!strncmp(line, "-E", 2)) compileMethod = 1;
  172.  
  173.                 /* don't link */
  174.                 if(!strncmp(line, "-c", 2)) compileMethod = 2;
  175.  
  176.                 /* don't assemble */
  177.                 if(!strncmp(line, "-S", 2)) compileMethod = 3;
  178.  
  179.                 /* verbose */
  180.                 if(!strncmp(line, "-v", 2)) verboseOutput = 1;
  181.                 if(!strncmp(line, "-vv", 3)) verboseOutput = 2;
  182.  
  183.                 /* optimize */
  184.                 if(!strncmp(line, "-O", 2)) optimizeMode = line[2]-'0';
  185.  
  186.                 /* output name */
  187.                 if(!strncmp(line, "-o=", 3)) strncpy(compilationName, &line[3], len-3);
  188.  
  189.                 /* fpu */
  190.                 if(!strncmp(line, "-lmieee", 7)) fpuCode = 1; /* IEEE */
  191.                 if(!strncmp(line, "-fpu", 4)) fpuCode = 2;
  192.  
  193.                 /* cpu */
  194.                 if(!strncmp(line, "-cpu", 4))
  195.                 {
  196.                     if(!strcmp(&line[len-5], "68000")) cpuCode = 0; else
  197.                     if(!strcmp(&line[len-5], "68010")) cpuCode = 1; else
  198.                     if(!strcmp(&line[len-5], "68020")) cpuCode = 2; else
  199.                     if(!strcmp(&line[len-5], "68030")) cpuCode = 3; else
  200.                     if(!strcmp(&line[len-5], "68040")) cpuCode = 4; else
  201.                     if(!strcmp(&line[len-5], "68060")) cpuCode = 5;
  202.                 }
  203.  
  204.  
  205.                 /* don't link stdlib */
  206.                 if(!strncmp(line, "-nostdlib", 9)) noStdLib = TRUE;
  207.  
  208.                 /* maxerrors */
  209.                 if(!strncmp(line, "-maxerrors=", 11)) maxErrors = strtol(&line[11], NULL, 10);
  210.  
  211.                 /* maxoptpasses */
  212.                 if(!strncmp(line, "-maxoptpasses=", 14)) maxOptPasses = strtol(&line[14], NULL, 10);
  213.  
  214.                 /* inline-size */
  215.                 if(!strncmp(line, "-inline-size=", 13)) inlineSize = strtol(&line[13], NULL, 10);
  216.             }
  217.         }
  218.  
  219.         fclose(fp);
  220.     }
  221.  
  222.     return(retval);
  223. }
  224.  
  225.  
  226.  
  227.  
  228. void saveConfigFile(char *filename)
  229. {
  230.     FILE *fp;
  231.  
  232.     if((fp = fopen(filename, "w")) != NULL)
  233.     {
  234.         int i;
  235.  
  236.         fprintf(fp, "%s\n", pp);
  237.         fprintf(fp, "%s\n", ppv);
  238.         fprintf(fp, "%s\n", as);
  239.         fprintf(fp, "%s\n", asv);
  240.         fprintf(fp, "%s\n", rm);
  241.         fprintf(fp, "%s\n", rmv);
  242.         fprintf(fp, "%s\n", ld);
  243.         fprintf(fp, "%s\n", l2);
  244.         fprintf(fp, "%s\n", ldv);
  245.         fprintf(fp, "%s\n", l2v);
  246.  
  247.  
  248.         /* write warnings */
  249.         for(i = 0; i < MAXWARNS; i++)
  250.             if(warnTable[i] != EMPTY)
  251.                 fprintf(fp, "-warn=%d\n", warnTable[i]);
  252.  
  253.         /* write ignore warnings */
  254.         for(i = 0; i < MAXWARNS; i++)
  255.             if(ignoreWarnTable[i] != EMPTY)
  256.                 fprintf(fp, "-dontwarn=%d\n", ignoreWarnTable[i]);
  257.  
  258.  
  259.         /* write extra include search paths */
  260.         for(i = 0; i < 10; i++)
  261.             if(includePathTable[i][0] != 0)
  262.                 fprintf(fp, "-I%s\n", includePathTable[i]);
  263.  
  264.  
  265.         /* write extra defines */
  266.         for(i = 0; i < 10; i++)
  267.             if(defineTable[i][0] != 0)
  268.                 fprintf(fp, "-D%s\n", defineTable[i]);
  269.  
  270.  
  271.         /* write extra link .lib's */
  272.         for(i = 0; i < 10; i++)
  273.             if(libLinkTable[i][0] != 0)
  274.                 fprintf(fp, "-l%s\n", libLinkTable[i]);
  275.  
  276.  
  277.         if(datamodel == SMALL)
  278.             fprintf(fp, "-sd\n");
  279.  
  280.         if(codemodel == SMALL)
  281.             fprintf(fp, "-sc\n");
  282.  
  283.         if(compilationName[0] != 0)
  284.             fprintf(fp, "-o=%s\n", compilationName);
  285.  
  286.  
  287.         /* cpu */
  288.         switch(cpuCode)
  289.         {
  290.             case 1: fprintf(fp, "-cpu=68010\n"); break;
  291.             case 2: fprintf(fp, "-cpu=68020\n"); break;
  292.             case 3: fprintf(fp, "-cpu=68030\n"); break;
  293.             case 4: fprintf(fp, "-cpu=68040\n"); break;
  294.             case 5: fprintf(fp, "-cpu=68060\n"); break;
  295.         }
  296.  
  297.         if(fpuCode == 2)
  298.             switch(cpuCode)
  299.             {
  300.                 case 2:                                     /* 020 */
  301.                 case 3: fprintf(fp, "-fpu=68881\n"); break; /* 030 */
  302.                 case 4: fprintf(fp, "-fpu=68040\n"); break; /* 040 */
  303.                 case 5: fprintf(fp, "-fpu=68060\n"); break; /* 060 */
  304.             }
  305.  
  306.  
  307.         /* optimization */
  308.         switch(optimizeMode)
  309.         {
  310.             case 0: fprintf(fp, "-O0\n"); break;
  311.             case 2: fprintf(fp, "-O1\n"); break;
  312.             case 3: fprintf(fp, "-O2\n"); break;
  313.             case 4: fprintf(fp, "-O3\n"); break;
  314.         }
  315.  
  316.  
  317.         if(verboseOutput == 1)
  318.             fprintf(fp, "-v\n");
  319.         else
  320.             if(verboseOutput == 2)
  321.                 fprintf(fp, "-vv\n");
  322.  
  323.  
  324.         if(compileMethod == 1) fprintf(fp, "-E\n");
  325.         else
  326.             if(compileMethod == 2) fprintf(fp, "-c\n");
  327.         else
  328.             if(compileMethod == 3) fprintf(fp, "-S\n");
  329.  
  330.  
  331.         if(noStdLib == TRUE)
  332.             fprintf(fp, "-nostdlib\n");
  333.  
  334.  
  335.         if(keepIntermediateFiles == 1)
  336.             fprintf(fp, "-k\n");
  337.  
  338.  
  339.         fprintf(fp, "-maxerrors=%d\n", maxErrors);
  340.  
  341.  
  342.         if(maxOptPasses != EMPTY)
  343.             fprintf(fp, "-maxoptpasses=%d\n", maxOptPasses);
  344.  
  345.  
  346.         if(inlineSize != EMPTY)
  347.             fprintf(fp, "-inline-size=%d\n", inlineSize);
  348.  
  349.  
  350.         if(stripfilename == TRUE)
  351.             fprintf(fp, "-strip-path\n");
  352.  
  353.  
  354.         fclose(fp);
  355.     }
  356.     else
  357.     {
  358.         printf("Can't write file \"%s\"!\n<press return>", filename);
  359.         getchar();
  360.     }
  361. }
  362.  
  363.  
  364.  
  365. main()
  366. {
  367.     int returnval = 0;
  368.     initDefaults();
  369.  
  370.     /* If loacle cfg file doesn't exist */
  371.     if(readConfigFile("vc.config") == 0)
  372.     {
  373.         if(readConfigFile("env:vc.config") == 0)
  374.         {
  375.             if(readConfigFile("envarc:vc.config") == 0)
  376.             {
  377.                 if(readConfigFile("vbcc:vc.config") == 0)
  378.                     printf("Locale configfile not found, reading default configfile.\n");
  379.                 else
  380.                     printf("No configfile found!\n");
  381.             }
  382.         }
  383.     }
  384.  
  385.  
  386.     while(returnval == 0)
  387.         returnval = mainMenu();
  388.  
  389.     if(returnval == SAVE)
  390.         saveConfigFile("vc.config");
  391.     else
  392.         if(returnval == SAVEDEFAULT)
  393.         {
  394.             saveConfigFile("ENV:vc.config");
  395.             saveConfigFile("ENVARC:vc.config");
  396.         }
  397.  
  398.     printf("\n\n");
  399.  
  400. }
  401.  
  402.  
  403.